package com.netflexitysolutions.amazonws.sdb.orm;

import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutorService;

import com.netflexitysolutions.amazonws.sdb.SimpleDB;
import com.netflexitysolutions.amazonws.sdb.orm.cache.Level2Cache;
import com.netflexitysolutions.amazonws.sdb.orm.metadata.SimpleDBMapping;

public interface SimpleDBSessionFactory {

	/**
	 * @return the properties
	 */
	public abstract Properties getProperties();

	/**
	 * @return the dataSource
	 */
	public abstract SimpleDB getDataSource();

	/**
	 * @return the maxResults
	 */
	public int getMaxResults();
	
	/**
	 * @param cacheName
	 * @return
	 */
	public <T>Level2Cache<T> getCache(String cacheName);

	/**
	 * @return the mapping
	 */
	public abstract SimpleDBMapping getMapping();

	/**
	 * @return
	 */
	public ExecutorService getQueryExecutor();
	
	/**
	 * @return
	 */
	public ExecutorService getManipulationExecutor();
	
	/**
	 * @return
	 */
	public List<SimpleDBSessionListener> getEntityInterceptors();
}